package main

import "fmt"

// Duck 接口
type Duck interface {
	Gaga()
	Walk()
	Swimming()
}

// pskDuck 结构体
type pskDuck struct {
	legs int
}

// pskDuck 实现 Duck 接口的方法
func (pd *pskDuck) Gaga() {
	fmt.Println("可达鸭Gaga的实现")
}

func (pd *pskDuck) Walk() {
	fmt.Println("可达鸭Walk的实现")
}

func (pd *pskDuck) Swimming() {
	fmt.Println("可达鸭Swimming的实现")
}

// pskDuck 自己的方法
func (pd *pskDuck) SetLegs(legs int) {
	pd.legs = legs
}

func (pd *pskDuck) GetLegs() int {
	return pd.legs
}

func main() {
	var d Duck = &pskDuck{}
	// 通过接口调用实现的方法
	d.Gaga()
	d.Walk()
	d.Swimming()

	// 类型断言，以便调用 pskDuck 自己的方法
	if pd, ok := d.(*pskDuck); ok {
		pd.SetLegs(2)
		fmt.Println(pd.GetLegs())
	}
}